aboutsummaryrefslogtreecommitdiff
path: root/src/routes/grocery/[id]
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-10-07 19:17:14 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-10-07 19:17:14 +0200
commit66939bab93cdcb9b7732c45d7bc3b99b6951fe15 (patch)
treeec6bc1631464410f8735da49e02e99abff0f3863 /src/routes/grocery/[id]
parent6e5dcdb53cea4c3f082d01c937fe5fc1d580c45b (diff)
feat: promote a reference as the primary shown in lists
Add an is_primary flag to references; the promoted ref sorts first on the item page and is the one shown under the item in the list and catalog. Item page gets a star toggle per reference.
Diffstat (limited to 'src/routes/grocery/[id]')
-rw-r--r--src/routes/grocery/[id]/+page.server.ts7
-rw-r--r--src/routes/grocery/[id]/+page.svelte37
2 files changed, 42 insertions, 2 deletions
diff --git a/src/routes/grocery/[id]/+page.server.ts b/src/routes/grocery/[id]/+page.server.ts
index 656e19c..a4ad377 100644
--- a/src/routes/grocery/[id]/+page.server.ts
+++ b/src/routes/grocery/[id]/+page.server.ts
@@ -6,10 +6,11 @@ import { loadAll as loadCategories } from '$lib/server/services/categories';
import {
loadForGrocery,
add as addRef,
+ promote,
deleteReference,
} from '$lib/server/services/references';
import { updateGrocery, deleteGrocery } from '$lib/server/services/groceries';
-import { deleteByIdAction } from '$lib/server/services/grocery-actions';
+import { idAction } from '$lib/server/services/grocery-actions';
import {
numericId,
parseFormString,
@@ -70,7 +71,9 @@ export const actions: Actions = {
},
delete: ({ request }) =>
- deleteByIdAction(request, deleteReference, { type: 'delete' }),
+ idAction(request, deleteReference, { type: 'delete' }),
+
+ promote: ({ request }) => idAction(request, promote, { type: 'promote' }),
update: async ({ request, params }) => {
const data = await request.formData();
diff --git a/src/routes/grocery/[id]/+page.svelte b/src/routes/grocery/[id]/+page.svelte
index 027c079..1a9aac8 100644
--- a/src/routes/grocery/[id]/+page.svelte
+++ b/src/routes/grocery/[id]/+page.svelte
@@ -156,6 +156,9 @@
{#each data?.references ?? [] as ref (ref.id)}
<Row variant="ref">
<div class="ref-info">
+ {#if ref.isPrimary}
+ <span class="primary-badge" title="Référence principale">★</span>
+ {/if}
<strong>{ref.reference}</strong>
{#if ref.price}
<span class="ref-detail"
@@ -166,6 +169,16 @@
<span class="ref-detail">Note : {ref.qualityScore}/100</span>
{/if}
</div>
+ {#if !ref.isPrimary}
+ <button
+ type="submit"
+ class="promote-btn"
+ name="id"
+ value={ref.id}
+ formaction="?/promote"
+ aria-label="Définir comme référence principale">☆</button
+ >
+ {/if}
<Button variant="ghost" name="id" value={ref.id} ariaLabel="Supprimer"
>&times;</Button
>
@@ -226,6 +239,30 @@
font-weight: 500;
}
+ .primary-badge {
+ color: var(--accent);
+ font-size: 0.875rem;
+ }
+
+ .promote-btn {
+ flex-shrink: 0;
+ width: 2rem;
+ aspect-ratio: 1;
+ padding: 0;
+ background: transparent;
+ border: none;
+ color: var(--text-secondary);
+ font-size: 1.25rem;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .promote-btn:hover {
+ color: var(--accent);
+ }
+
.error {
margin-top: -0.25rem;
margin-bottom: 0.5rem;